package com.wyx.suanfa;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author 王艺锡
 * @version 1.0
 */
public class decodeString {
    //给定一个经过编码的字符串，返回它解码后的字符串。
    //
    //编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
    //
    //你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入的方括号总是符合格式要求的。
    //
    //此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，例如不会出现像 3a 或 2[4] 的输入。
    public static void main(String[] args) {
        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();
        // 前一个小时的开始时间（整点）
        LocalDateTime startOfPreviousHour = now.minusHours(1).withMinute(0).withSecond(0).withNano(0);
        ZonedDateTime startOfPreviousHourZoned = startOfPreviousHour.atZone(ZoneId.systemDefault());
        long startOfPreviousHourTimestamp = startOfPreviousHourZoned.toEpochSecond();

        // 前一个小时的结束时间（59分59秒）
        LocalDateTime endOfPreviousHour = now.minusHours(1).withMinute(59).withSecond(59).withNano(999_999_999);
        ZonedDateTime endOfPreviousHourZoned = endOfPreviousHour.atZone(ZoneId.systemDefault());
        long endOfPreviousHourTimestamp = endOfPreviousHourZoned.toEpochSecond();

        System.out.println("Start of previous hour timestamp: " + startOfPreviousHourTimestamp);
        System.out.println("End of previous hour timestamp: " + endOfPreviousHourTimestamp);

    }
}
/*
* class Solution {
    int ptr;
    public String decodeString(String s) {
        ptr = 0;
        //栈
        LinkedList<String> stack = new LinkedList<>();
        while(ptr < s.length()){
            char ch = s.charAt(ptr);
            if(Character.isDigit(ch)){//如果是数字
                //将数字进栈
                stack.addLast(getDigit(s));
            }else if(Character.isLetter(ch)|| '[' == ch){
                //如果是字母或者[
                stack.addLast(String.valueOf(s.charAt(ptr++)));
            }else{//如果是]
                ++ptr;
                //创建一个栈取出字符
                LinkedList<String> temp = new LinkedList<>();
                while(!"[".equals(stack.peekLast())){
                    temp.addFirst(stack.removeLast());
                }
                //取出左括号
                stack.removeLast();
                //此时当前栈顶是当前字符循环的次数
                int num = Integer.parseInt(stack.removeLast());
                String str = getString(temp);
                String str1 = "";
                while(num-- > 0){
                    str1 += str;
                }
                stack.addLast(str1);
            }
        }
        return getString(stack);

    }

    private String getDigit(String s){
        StringBuffer ret = new StringBuffer();
        while(Character.isDigit(s.charAt(ptr))){
            ret.append(s.charAt(ptr++));
        }
        return ret.toString();
    }

    private String getString(LinkedList<String> list){
       StringBuffer ret = new StringBuffer();
       for(String str: list){
            ret.append(str);
       }
       return ret.toString();
    }


}*/